#include<iostream>
#include<future>
#include<functional>
#include<thread>
#include<memory>
#include<unistd.h>
int Add(int x,int y)
{
    std::cout<<"in add"<<std::endl;
    return x+y;
}
int main()
{

    //1 实例化一个存储结果为int的promise对象
    std::promise<int> pro;
    //2 获取future关联对象
    std::future<int> f=pro.get_future();
    //3 创建线程执行task,引用捕捉pro对象到线程内部来存储Add函数的返回结果
    std::thread p(
        [&pro](){
            int ret=Add(11,11);
            //把返回结果设置到pro对象内部
            //外部线程再通过future对象获取结果
            
            pro.set_value(ret);
            sleep(3);
        }
    );
    //4 获取结果，如果task的执行结果没有设置到pro对象中
    //f.get()获取结果会阻塞
    int ret =f.get();
    std::cout<<ret<<std::endl;

    p.join();
    return 0;
}